La optimización es un tema importante con un amplio campo de aplicaciones en los problemas de toma de decisiones que surgen en economía, ingeniería, logística y transporte, planificación del tráfico, ubicación y diseño de instalaciones, telecomunicaciones, redes sociales y biológicas, aprendizaje automático y otros campos.
Si bien se han desarrollado algunos algoritmos de solución para los problemas de optimización más interesantes, y aunque se han propuesto varios enfoques de solución diferentes para los mismos problemas de optimización, es posible que su rendimiento no siempre sea satisfactorio en la práctica y / o en la teoría.
import plotly.graph_objects as go
fig = go.Figure(data=[
go.Mesh3d(
x=[0, 1, 2, 0],
y=[0, 0, 1, 2],
z=[0, 2, 0, 1],
colorbar_title='z',
colorscale=[[0, 'gold'],
[0.5, 'mediumturquoise'],
[1, 'magenta']],
# Intensity of each vertex, which will be interpolated and color-coded
intensity=[0, 0.33, 0.66, 1],
# i, j and k give the vertices of triangles
# here we represent the 4 triangles of the tetrahedron surface
i=[0, 0, 0, 1],
j=[1, 2, 3, 2],
k=[2, 3, 1, 3],
name='y',
showscale=True
)
])
fig.update_layout(title='En lp tenemos vertices lineales', autosize=False,
width=500, height=500,
margin=dict(l=65, r=50, b=65, t=90))
fig.show()
import plotly.graph_objects as go
import pandas as pd
# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
fig = go.Figure(data=[go.Surface(z=z_data.values)])
fig.update_layout(title='En nlp cambia: Superficies con multiples vertices', autosize=False,
width=500, height=500,
margin=dict(l=65, r=50, b=65, t=90))
fig.show()

Los enfoques heurísticos y metaheurísticos modernos (del griego “Heuriskein” -'υρισ κ ιν - encontrar, descubrir) se han vuelto tan populares que ha nacido una nueva rama de optimización que diseña algoritmos inspirados en la física o la naturaleza, como optimización simulada de recocido, colonia de hormigas o enjambre de partículas.
pip install ortools

basico para resolver un problema de PL:
\begin{enumerate} \item Importe el contenedor del solucionador lineal, \item declarar el solucionador de LP, \item definir las variables, \item definir las restricciones, \item definir el objetivo, \itemllamar al solucionador de LP; y mostrar la solución \end{enumerate}from ortools.linear_solver import pywraplp
def EjemploPL():
"""Linear programming sample."""
# Agregar el solver GLOP al problema
solver = pywraplp.Solver.CreateSolver('CBC')
# Crear las dos variables x1 y x2 >= a cero, osea positivas.
x1 = solver.NumVar(0, solver.infinity(), 'x1')
x2 = solver.NumVar(0, solver.infinity(), 'x2')
print('Numero de variables =', solver.NumVariables())
print('R1 = x2+2x2<=14')
# Constraint 0: x + 2y <= 14.
solver.Add(x1 + 2 * x2 <= 14.0)
# Constraint 1: 3x - y >= 0.
solver.Add(3 * x1 - x2 >= 0.0)
# Constraint 2: x - y <= 2.
solver.Add(x1 - x2 <= 2.0)
print('Numero de restricciones =', solver.NumConstraints())
# Objective function: 3x + 4y.
solver.Maximize(3 * x1 + 4 * x2)
# Solve the system.
status = solver.Solve()
if status == pywraplp.Solver.OPTIMAL:
print('Solucion:')
print('Z =', solver.Objective().Value())
print('x1 =', x1.solution_value())
print('x2 =', x2.solution_value())
else:
print('Grave!, el problema no tiene solucion.')
print('\nAvanzado:')
print('Problem solved in %f milliseconds' % solver.wall_time())
print('Problem solved in %d iterations' % solver.iterations())
EjemploPL()
Numero de variables = 2 R1 = x2+2x2<=14 Numero de restricciones = 3 Solucion: Z = 34.0 x1 = 6.0 x2 = 4.0 Avanzado: Problem solved in 23.000000 milliseconds Problem solved in 0 iterations